import { Column, CreateDateColumn, Entity, UpdateDateColumn } from 'typeorm';

import { ApiProperty } from '@nestjs/swagger';

/**
 * 删除状态基础实体
 * 包含软删除标志
 */
@Entity()
export abstract class DeleteStatusEntity {
  /**
   * 删除标志
   * @description 0=存在，1=删除
   */
  @ApiProperty({ type: String, description: '删除标志' })
  @Column({ type: 'char', name: 'del_flag', default: '0', length: 1, comment: '删除标志' })
  public delFlag: string;
}

/**
 * 状态基础实体
 * 继承删除状态实体，并添加启用状态标志
 */
@Entity()
export abstract class BaseStatusEntity extends DeleteStatusEntity {
  /**
   * 状态标志
   * @description 0=正常，1=停用
   */
  @ApiProperty({ type: String, description: '状态' })
  @Column({ type: 'char', name: 'status', default: '0', length: 1, comment: '状态' })
  public status: string;
}

/**
 * 完整基础实体
 * 包含通用的审计字段：创建人、创建时间、更新人、更新时间、备注
 */
@Entity()
export abstract class BaseEntity extends BaseStatusEntity {
  /**
   * 创建人
   * @description 记录创建者的用户名
   */
  @ApiProperty({ type: String, description: '创建者' })
  @Column({ type: 'varchar', name: 'create_by', length: 64, default: '', comment: '创建者' })
  public createBy: string;

  /**
   * 创建时间
   * @description 记录创建的具体时间，自动生成
   */
  @CreateDateColumn({ type: 'datetime', name: 'create_time', default: null, comment: '创建时间' })
  public createTime: Date;

  /**
   * 更新人
   * @description 记录最后修改者的用户名
   */
  @Column({ type: 'varchar', name: 'update_by', length: 64, default: '', comment: '更新者' })
  public updateBy: string;

  /**
   * 更新时间
   * @description 记录最后修改的具体时间，自动更新
   */
  @UpdateDateColumn({ type: 'datetime', name: 'update_time', default: null, comment: '更新时间' })
  public updateTime: Date;

  /**
   * 备注
   * @description 其他补充说明信息
   */
  @Column({ type: 'varchar', name: 'remark', length: 500, default: null, comment: '备注' })
  public remark: string;
}
